Add a gtk_window_close function
authorMatthias Clasen <mclasen@redhat.com>
Sat, 29 Jun 2013 02:19:15 +0000 (22:19 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 29 Jun 2013 02:19:15 +0000 (22:19 -0400)
This is useful when adding close buttons in custom titlebars.

docs/reference/gtk/gtk3-sections.txt
gtk/gtkwindow.c
gtk/gtkwindow.h

index 481c101c049c87b9a639e3066eee7c0e355615ca..fa1449e5fd92900a8d2ed3d73995c4d1fded2f9f 100644 (file)
@@ -5560,6 +5560,7 @@ gtk_window_get_default_widget
 gtk_window_set_default
 gtk_window_present
 gtk_window_present_with_time
+gtk_window_close
 gtk_window_iconify
 gtk_window_deiconify
 gtk_window_stick
index f669abd949d602bf3aff67a8357257fa9890d2b4..4c96e65d61a3c57f664951b8be4c16e6fc0b8fb3 100644 (file)
@@ -1235,7 +1235,7 @@ gtk_window_title_max_clicked (GtkWidget *widget, gpointer data)
 static gboolean
 send_delete_event (gpointer data)
 {
-  GtkWidget *window = GTK_WIDGET (data);
+  GtkWidget *window = data;
   GdkEvent *event;
 
   event = gdk_event_new (GDK_DELETE);
@@ -1249,10 +1249,25 @@ send_delete_event (gpointer data)
   return G_SOURCE_REMOVE;
 }
 
-static void
-gtk_window_title_close_clicked (GtkWidget *button, gpointer data)
+/**
+ * gtk_window_close:
+ * @window: a #GtkWindow
+ *
+ * Requests that the window is closed, similar to what happens
+ * when a window manager close button is clicked.
+ *
+ * This function can be used with close buttons in custom
+ * titlebars.
+ *
+ * Since: 3.10
+ */
+void
+gtk_window_close (GtkWindow *window)
 {
-  gdk_threads_add_idle (send_delete_event, data);
+  if (!gtk_widget_get_realized (GTK_WIDGET (window)))
+    return;
+
+  gdk_threads_add_idle (send_delete_event, window);
 }
 
 static void
@@ -5157,7 +5172,7 @@ update_window_buttons (GtkWindow *window)
                       gtk_widget_set_can_focus (button, FALSE);
                       gtk_widget_show_all (button);
                       g_signal_connect (button, "clicked",
-                                        G_CALLBACK (gtk_window_title_close_clicked), window);
+                                        G_CALLBACK (gtk_window_close), window);
                       priv->title_close_button = button;
                     }
 
index a4de027788575b15ca63a8f05644d1d945715203..4324cb7f5be9f43d1fb64273dd87212f281fa228 100644 (file)
@@ -348,6 +348,8 @@ GDK_AVAILABLE_IN_ALL
 void     gtk_window_fullscreen    (GtkWindow *window);
 GDK_AVAILABLE_IN_ALL
 void     gtk_window_unfullscreen  (GtkWindow *window);
+GDK_AVAILABLE_IN_3_10
+void     gtk_window_close         (GtkWindow *window);
 GDK_AVAILABLE_IN_ALL
 void     gtk_window_set_keep_above    (GtkWindow *window, gboolean setting);
 GDK_AVAILABLE_IN_ALL